#ifndef LIREXML_H
#define LIREXML_H

#include "ADDObjetBase.h"

#include <QtCore/QObject>
#include <QtXml/QDomDocument>
#include <QtXml/QDomNode>
#include <map>

class QDomNode;

/**
 * Permet de lire un fichier xml et extrait l'information sous forme
 * de map. L'utilisation du parseur natif Qt permet de faire toutes
 * les vérifications syntaxiques d'usage en une seule fois. Une fois
 * le fichier lu, l'information est stockée dans un tableau
 * associatif, chaque tag étant associé à la valeur lue.
 *
 * @author Johan "Solo" Luisier
 */
class LireXML : public QObject, public ADDObjetBase
{
  Q_OBJECT
    public:
  LireXML(const std::string& nom);
  virtual ~LireXML();
  void getInformation(std::map<std::string, std::string>& info) const;
  bool estOK() const;
  static void setLevel( const DebugLevelType& level, const unsigned& );
 private :
  /**
   *  Document XML, à ne pas confondre avec le fichier. Il s'agit ici
   * de la structure (l'arbre) DOM.
   */
  QDomDocument doc;
  void lire();
  void trouverEnfants(QDomNode& noeud);
  /**
   * Tableau associatif contenant les données associées à chaque
   * balise. La structure est balise - données.
   */
  std::map<std::string, std::string> Information;
  /**
   * Sert à savoir s'il faut ajouter un '+' (ou plus) au nom de la
   * balise. Est un membre de la classe car sinon ça ne fonctionne pas
   * bien.
   */
  bool ajouterPlus;
  /**
   * Contient la chaîne de caractère qu'il faut ajouter au nom de la
   * balise dans les cas ambigus (PJ ayant plusieurs classes).
   */
  std::string ajout;
  /**
   * Niveau de sortie réglant l'affichage d'informations relatives à
   * la lecture eds informations depuis le document DOM.
   */
  static DebugLevelType interne;
};

#endif // LIREXML_H
